﻿using MusicPlayerPlus.Interface.Model.Enum;
using MusicPlayerPlus.Interface.Model.Muisc;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace MusicPlayerPlus.Core.Reflection.ActionParam.Action.Input
{
    #region Base

    /// <summary>
    /// 自动执行动作接口
    /// </summary>
    public class APAutoExecuteAction
    {
        public System.Action<System.Action> AutoExecute { get; set; }
    }
    /// <summary>
    /// 添加按钮动作接口
    /// </summary>
    public class APAddToButtonAction
    {
        public System.Action<Action<string, System.Action>> AddToButton { get; set; }
    }
    /// <summary>
    /// 添加菜单动作接口
    /// </summary>
    public class APAddToMenuAction
    {
        public System.Action<Action<string, System.Action>> AddToMenu { get; set; }
    }


    /// <summary>
    /// 设置主窗体
    /// </summary>
    public class APSetMainWindow
    {
        public System.Action<Action<object>> SetMainWindow { get; set; }
    }
    /// <summary>
    /// 主窗体 显示
    /// </summary>
    public class APMainWindowShow
    {
        public System.Action<System.Action> MainWindowShow { get; set; }
    }
    /// <summary>
    /// 主窗体 隐藏
    /// </summary>
    public class APMainWindowHide
    {
        public System.Action<System.Action> MainWindowHide { get; set; }
    }

    /// <summary>
    /// 主窗体 最大化
    /// </summary>
    public class APMainWindowMin
    {
        public System.Action<System.Action> MainWindowMin { get; set; }
    }
    /// <summary>
    /// 主窗体 最小化
    /// </summary>
    public class APMainWindowMax
    {
        public System.Action<System.Action> MainWindowMax { get; set; }
    }
    #endregion

    #region Media

    /// <summary>
    /// (改变后事件)进度条改变
    /// </summary>
    public class APTimeLineChangeAction
    {
        public System.Action<Action<double, double>> TimeLineChange { get; set; }
    }
    /// <summary>
    /// (主动)进度条改变
    /// </summary>
    public class APChangeTimeLineAction
    {
        public System.Action<Action<double>> ChangeTimeLine { get; set; }
    }
    /// <summary>
    /// (改变后事件)音量改变
    /// </summary>
    public class APVolumeChangeAction
    {
        public System.Action<Action<double>> VolumeChange { get; set; }
    }
    /// <summary>
    /// (主动)音量改变
    /// </summary>
    public class APChangeVolumeAction
    {
        public System.Action<Action<double>> ChangeVolume { get; set; }
    }
    /// <summary>
    /// 缓冲进度条改变
    /// </summary>
    public class APBufferingTimeLineChangeAction
    {
        public System.Action<Action<double, double>> BufferingTimeLineChange { get; set; }
    }
    /// <summary>
    /// 播放状态改变
    /// </summary>
    public class APPlayStateChangeAction
    {
        public System.Action<Action<MediaPlayState>> PlayStateChange { get; set; }
    }
    /// <summary>
    /// 播放顺序改变
    /// </summary>
    public class APPlayOrderChangeAction
    {
        public System.Action<Action<MediaPlayPlayOrder>> PlayPlayOrderChange { get; set; }
    }
    /// <summary>
    /// 播放
    /// </summary>
    public class APPlayAction
    {
        public System.Action<System.Action> Play { get; set; }
    }
    /// <summary>
    /// 暂停
    /// </summary>
    public class APPauseAction
    {
        public System.Action<System.Action> Pause { get; set; }
    }
    /// <summary>
    /// 停止
    /// </summary>
    public class APStopAction
    {
        public System.Action<System.Action> Stop { get; set; }
    }
    /// <summary>
    /// 上一首
    /// </summary>
    public class APPreviousTrackAction
    {
        public System.Action<System.Action> PreviousTrack { get; set; }
    }
    /// <summary>
    /// 下一首
    /// </summary>
    public class APNextTrackAction
    {
        public System.Action<System.Action> NextTrack { get; set; }
    }

    #endregion

    #region ChangeEven

    /// <summary>
    /// Dictionary数据改变时
    /// </summary>
    public class APDictionaryChange
    {
        public System.Action<Action<Guid, object>> DictionaryChange { get; set; }
    }
    /// <summary>
    /// 播放列表改变时
    /// </summary>
    public class APPlayListChange
    {
        public System.Action<Action<Guid, PlayList>> PlayListChange { get; set; }
    }
    /// <summary>
    /// 播放中的列表改变时
    /// </summary>
    public class APMuiscListChange
    {
        public System.Action<Action<Dictionary<Guid, MusicItem>>> MuiscListChange { get; set; }
    }
    /// <summary>
    /// 播放的歌曲改变时
    /// </summary>
    public class APPlayMusicChange
    {
        public System.Action<Action<MusicItem>> PlayMusicChange { get; set; }
    }


    /// <summary>
    /// 定向通道被触发
    /// </summary>
    public class APOrientationActionChange
    {
        public System.Action<string, Action<string, object>> OrientationActionChange { get; set; }
    }

    #endregion
}